import asyncio

import pygame

import cfg
from debug import debug
from units.uiUtil import gameBgImg, drawText

bg = pygame.image.load('tower/image/bg.png')

class MainTower:

    def __init__(self, dims, FPS=60):
        self.dims = dims
        self.FPS = FPS
        # 游戏运行控制变量（gamen_running）
        self.game_running = True
        self.score = 0

    async def start(self):
        # 初始化pygame，预定义各种常量
        pygame.init()
        # 初始化游戏界面（screen）：尺寸、背景色等
        screen = pygame.display.set_mode(self.dims)
        # 显示游戏名称
        pygame.display.set_caption("魔塔50层")
        # 初始化游戏时钟（clock），由于控制游戏帧率
        clock = pygame.time.Clock()
        # 播放背景音乐
        # playMyBgMusic('')

        # 游戏主循环
        while cfg.inGame:
            # 按照给定的 FPS 刷新游戏
            # clock.tick() 函数返回上一次调用该函数后经历的时间，单位为毫秒 ms
            # dt 记录上一帧接受之后经历的时间，单位为秒 m
            # 使用 dt 控制物体运动可以使游戏物理过程与帧率无关
            dt = clock.tick(self.FPS) / 1000.0
            # 使用 asyncio 同步
            # 此外游戏主体代码中不需要再考虑 asyncio
            await asyncio.sleep(0)

            # 游戏事件处理
            # 包括键盘、鼠标输入等
            for event in pygame.event.get():
                # 点击关闭窗口按钮或关闭网页
                if event.type == pygame.QUIT:
                    pygame.quit()

            # 以背景色覆盖刷新游戏界面
            gameBgImg(screen, bg, 270, self.dims)
            # 调用 debug 函数在游戏界面左上角显示游戏帧率
            debug(f"{clock.get_fps():.1f}", 20, 10, color='green')
            # 显示分数
            drawText(f'魔塔50层', "black", (20, 50), screen)

            # 将游戏界面内容输出至屏幕
            pygame.display.update()

            # 跳出游戏主循环，退出游戏
        cfg.inGame = False

if __name__ == '__main__':
    cfg.inGame = True
    asyncio.run(MainTower((cfg.width, cfg.height), FPS = 60).start())